<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of PessoaMapper
 *
 * @author felipe
 */
class App_Model_PessoaMapper extends Voitech_Mapper {
    
    public function __construct(App_Model_Pessoa $obModel) {
        $this->obModel = $obModel;        
    }
    
    public function buscarPorId() {        
        $obRow = App_Model_Db_Pessoa::build()->buscarId($this->obModel->getCoPessoa());
        if(empty($obRow))
        {
            return;
        }
        $this->carregar($obRow);               
        return $this;
    }
    
    public function carregar(stdClass $obRow) {                   
        $this->obModel->setCoPessoa($obRow->co_pessoa)
                       ->setNoPessoa($obRow->no_pessoa)
                       ->setNuCpf($obRow->nu_cpf)
                       ->setNuRg($obRow->nu_rg)
                       ->setDsEndereco($obRow->ds_endereco)
                       ->setNuTelefone($obRow->nu_telefone)
                       ->setStAtivo($obRow->st_ativo)
                       ->setDtCadastro($obRow->dt_cadastro)
                       ->setExcluir($obRow->excluir);
        return $this;
    }    
    
    public function cadastrar() {
        $arPessoa = $this->retornarArrayPopulado();  
        $arPessoa['co_pessoa_cadastro'] = $this->obModel->getObUsuarioCadastro()->getCoPessoa();
         return App_Model_Db_Pessoa::build()->insert($arPessoa);                                         
    }
    
    public function alterar(){
        $arPessoa = $this->retornarArrayPopulado();        
        return App_Model_Db_Pessoa::build()->update($arPessoa,App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?',$this->obModel->getCoPessoa()));                
    }
    
    public function ativar() {
        if($this->obModel->getCoPessoa() == ''){
            throw new Voitech_Exception('Falta cod. pessoa');
        }
        $arrPessoa = array('st_ativo'=>'S');       
        return App_Model_Db_Pessoa::build()->update($arrPessoa,App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?',$this->obModel->getCoPessoa()));                
    }
    
    public function desativar() {
        if($this->obModel->getCoPessoa() == ''){
            throw new Voitech_Exception('Falta cod. pessoa');
        }
        $arrPessoa = array('st_ativo'=>'N');
        return App_Model_Db_Pessoa::build()->update($arrPessoa
                                                      ,App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?',$this->obModel->getCoPessoa()));                
    }
    
    public function retornarArrayPopulado() {
        $arrPessoa = array('no_pessoa'=>$this->obModel->getNoPessoa()
                          ,'nu_cpf'=>$this->obModel->getNuCpf());
       
        if( $this->obModel->getCoPessoa() != '' ) {
            $arrPessoa['co_pessoa'] = $this->obModel->getCoPessoa();
        }
        if( $this->obModel->getNuRg() != '' ) {
            $arrPessoa['nu_rg'] = $this->obModel->getNuRg();
        }
        if( $this->obModel->getDsEndereco() != '' ) {
            $arrPessoa['ds_endereco'] = $this->obModel->getDsEndereco();
        }        
        if( $this->obModel->getNuTelefone() != '' ) {
            $arrPessoa['nu_telefone'] = $this->obModel->getNuTelefone();
        }
        return $arrPessoa;
   }

    public function excluir() {
        if($this->obModel->getCoPessoa() == ''){
            throw new Voitech_Exception('Falta cod. pessoa');
        }      
        return App_Model_Db_Pessoa::build()->delete(App_Model_Db_Pessoa::build()->getAdapter()->quoteInto('co_pessoa = ?',$this->obModel->getCoPessoa()));                
    }
}